package com.wans.ssq.controller.v1;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.wans.common.constans.CustomExceptionEnum;
import com.wans.common.exception.CustomRunningException;
import com.wans.common.result.ResponseResult;
import com.wans.model.lottery.ssq.dos.SSQUser;
import com.wans.model.lottery.ssq.dtos.ListUserRecordDTO;
import com.wans.model.lottery.ssq.dtos.UserRecordDTO;
import com.wans.ssq.common.util.UserRecordDTOValidationUtils;
import com.wans.ssq.service.UserSSQService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/lottery/ssq/user")
public class UserSSQController {

    @Autowired
    private UserSSQService userSSQService;
    @Autowired
    private HttpServletRequest request;

    /**
     * 添加个人双色球的对外暴露接口
     * @param userRecord 记录
     * @return 是否操作成功 - 标准响应
     */
    @PostMapping()
    public ResponseResult<Void> saveUserRecord(@RequestBody UserRecordDTO userRecord) {

        // 验证请求头
        if (StringUtils.isBlank(request.getHeader("X-User-ID")))
            throw new CustomRunningException(CustomExceptionEnum.GATEWAY_VALID_EX);

        // 验证基本数据格式
        UserRecordDTOValidationUtils.validate(userRecord);

        return userSSQService.saveUserRecord(userRecord, request.getHeader("X-User-ID"));
    }

    /**
     * 删除指定id的用户双色球记录
     * @param id id
     * @return 删除结果
     */
    @DeleteMapping()
    public ResponseResult<Void> deleteUserRecord(@RequestParam("id") String id) {

        // 验证请求头
        if (StringUtils.isBlank(request.getHeader("X-User-ID")))
            throw new CustomRunningException(CustomExceptionEnum.GATEWAY_VALID_EX);

        // 验证基本数据格式
        if(StringUtils.isBlank(id))
            throw new CustomRunningException(CustomExceptionEnum.SSQ_PAGE_ERROR);

        return userSSQService.deleteUserRecord(id, request.getHeader("X-User-ID"));

    }

    /**
     * 修改某一条记录
     * @param userRecord 修改记录
     * @return 修改结果
     */
    @PutMapping()
    public ResponseResult<Void> updateUserRecord(@RequestBody UserRecordDTO userRecord) {

        // 验证请求头
        if (StringUtils.isBlank(request.getHeader("X-User-ID")))
            throw new CustomRunningException(CustomExceptionEnum.GATEWAY_VALID_EX);

        // 验证基本数据格式
        UserRecordDTOValidationUtils.validate(userRecord);

        return userSSQService.updateUserRecord(userRecord, request.getHeader("X-User-ID"));
    }

    /**
     * 获取数据列表
     * @param queryParam 请求参数、分页等
     * @return 数据列表
     */
    @GetMapping()
    public ResponseResult<List<SSQUser>> listUserRecords(ListUserRecordDTO queryParam) {
        // 验证请求头
        if (StringUtils.isBlank(request.getHeader("X-User-ID")))
            throw new CustomRunningException(CustomExceptionEnum.GATEWAY_VALID_EX);

        // 验证基本数据格式

        return userSSQService.listUserRecords(queryParam, request.getHeader("X-User-ID"));
    }


    /**
     * 获取数据列表 - 未进行计算奖金的数据记录
     * @return 数据列表
     */
    @GetMapping("/update")
    public ResponseResult<List<SSQUser>> listUserRecords() {
        // 验证基本数据格式

        return userSSQService.listUserRecords();
    }

    /**
     * 修改某一条记录
     * @param userRecord 修改记录
     * @return 修改结果
     */
    @PutMapping("/update")
    public ResponseResult<Void> updateRecord(@RequestBody SSQUser userRecord) {

        // 验证基本数据格式

        return userSSQService.updateRecord(userRecord);
    }
}
